/**
 * Servlet GestionCitas: destinado a la gestion de todas las acciones que tengan una relacion
 * directa con las citas
 */

package infb.servlet.movil;

// Importaciones externas
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.naming.*;

// Importaciones internas
import infb.modelo.*;
import infb.dao.*;


public class GestionCitas extends HttpServlet {

    PacientesInterfaz pacienteDAO=null;

    /**
     * Metodo para inicializar la capa DAO utilizada en el servlet: muy importante a la hora
     * de optimizar los recursos de nuestra aplicacion
     * @param config
     * @throws javax.servlet.ServletException
     */
    @Override
    public void init(ServletConfig config) throws ServletException {
        super.init(config);
        // Inicializacion de objetos de la capa DAO
        try{
            Context contexto=new InitialContext();
            pacienteDAO=(PacientesInterfaz)contexto.lookup("PacientesEJB");
        }catch(Exception e){
            e.printStackTrace();
        }
    }

    /**
     * Metodo auxiliar para la gestion de la solicitud de citas del paciente
     * @param entradaDesdeCliente El flujo de informacion entrante desde el cliente
     *        utilizado para recibir los parametros oportunos que necesitara el metodo
     * @param salidaHaciaCliente El flujo de informacion saliente hacia el cliente
     *        enviado desde el servidor para retransmitir los resultados de las operaciones
     *        realizadas
     * @throws java.io.IOException
     */
    private void pedirCita(DataInputStream entradaDesdeCliente,DataOutputStream salidaHaciaCliente)
    throws IOException {
        // Codigo propio del metodo
        // Enviamos la informacion al cliente
        salidaHaciaCliente.flush();
    }

    /**
     * Procesa la peticion del cliente (dispositivo movil) para atender peticiones de login/logout
     * @param peticion El objeto que encapsula la peticion del cliente
     * @param response El objeto que encapsula la respuesta del servidor a la peticion en cuestion
     * @throws ServletException Si ocurre un error especifico de servlet
     * @throws IOException Si ocurre un error de entrada/salida
     */
    protected void procesarPeticion(HttpServletRequest peticion,HttpServletResponse respuesta)
    throws ServletException,IOException {
        // Inicializacion de los flujos
        DataInputStream entradaDesdeCliente=new DataInputStream(peticion.getInputStream());
        DataOutputStream salidaHaciaCliente=new DataOutputStream(respuesta.getOutputStream());
        // Procesamos el mensaje enviado por el cliente: la accion (login o logout), el perfil: necesario
        // para saber sobre que tabla autenticarnos, la identificacion: que sera o bien la tarjeta sanitaria en caso
        // de un paciente o bien el numero de colegiado en caso del medico, y por ultimo el password
        String accion=entradaDesdeCliente.readUTF();
        if(accion.equalsIgnoreCase("pedir_cita")){
            pedirCita(entradaDesdeCliente,salidaHaciaCliente);
        }else if(accion.equalsIgnoreCase("otra_cosa")){
            // otro metodo como pedir cita
        }else if(accion.equalsIgnoreCase("otra_accion")){
            // otro metodo privado declarado exactamente igual
            // que pedir cita
        }
        // Cerramos los flujos
        entradaDesdeCliente.close();
        salidaHaciaCliente.close();
    }

    /**
     * Procesamiento de peticiones cliente GET
     * @param peticion El objeto que encapsula la peticion del cliente
     * @param response El objeto que encapsula la respuesta del servidor a la peticion en cuestion
     * @throws ServletException Si ocurre un error especifico de servlet
     * @throws IOException Si ocurre un error de entrada/salida
     */
    @Override
    protected void doGet(HttpServletRequest peticion,HttpServletResponse respuesta)
    throws ServletException,IOException {
        procesarPeticion(peticion,respuesta);
    }

    /**
     * Procesamiento de peticiones cliente POST
     * @param peticion El objeto que encapsula la peticion del cliente
     * @param response El objeto que encapsula la respuesta del servidor a la peticion en cuestion
     * @throws ServletException Si ocurre un error especifico de servlet
     * @throws IOException Si ocurre un error de entrada/salida
     */
    @Override
    protected void doPost(HttpServletRequest peticion,HttpServletResponse respuesta)
    throws ServletException,IOException {
        procesarPeticion(peticion,respuesta);
    }

    /**
     * Devuelve una descripcion de la funcionalidad del servlet
     * @return un String con la descripcion del servlet
     */
    @Override
    public String getServletInfo() {
        return "Servlet destinado al procesamiento de acciones que tengan vinculacion directa con las citas en la aplicacion movil";
    }

}
